package com.rolerealm.controller;

import com.rolerealm.common.result.Result;
import com.rolerealm.common.util.ResultUtil;
import com.rolerealm.common.constant.ErrorCode;
import com.rolerealm.service.LLMService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/test")
@RequiredArgsConstructor
public class TestController {

    private final LLMService llmService;

    /**
     * 测试DeepSeek模型调用
     */
    @PostMapping("/deepseek")
    public Result<String> testDeepSeek(@RequestBody TestRequest request) {
        try {
            log.info("测试DeepSeek模型调用，输入: {}", request.getPrompt());
            
            String response = llmService.infer(request.getPrompt(), "deepseek");
            
            log.info("DeepSeek模型响应: {}", response);
            return ResultUtil.success(response);
            
        } catch (Exception e) {
            log.error("测试DeepSeek模型失败", e);
            return ResultUtil.error(ErrorCode.AI_INFERENCE_FAILED);
        }
    }

    /**
     * 测试角色扮演功能
     */
    @PostMapping("/roleplay")
    public Result<String> testRoleplay(@RequestBody RoleplayTestRequest request) {
        try {
            log.info("测试角色扮演功能，角色: {}, 输入: {}", request.getCharacter(), request.getPrompt());
            
            // 根据角色构建具体的角色设定
            String characterPrompt = buildCharacterPrompt(request.getCharacter());
            String roleplayPrompt = characterPrompt + "\n\n用户说：" + request.getPrompt();
            
            String response = llmService.infer(roleplayPrompt, "deepseek-v3");
            
            log.info("角色扮演响应: {}", response);
            return ResultUtil.success(response);
            
        } catch (Exception e) {
            log.error("测试角色扮演失败", e);
            return ResultUtil.error(ErrorCode.AI_INFERENCE_FAILED);
        }
    }
    
    /**
     * 构建角色设定提示词
     */
    private String buildCharacterPrompt(String character) {
        switch (character) {
            case "苏格拉底":
                return "你是苏格拉底，古希腊哲学家，西方哲学的奠基者之一。\n\n" +
                       "角色特点：\n" +
                       "- 说话时会说'我知道我一无所知'等经典台词\n" +
                       "- 喜欢用问答法引导学生思考\n" +
                       "- 语气温和但富有智慧\n" +
                       "- 经常引用哲学名言\n" +
                       "- 喜欢探讨真理、智慧、美德等话题\n\n" +
                       "请始终保持苏格拉底的语气和性格特点，即使回答其他问题也要保持角色设定。";
                       
            case "莎士比亚":
                return "你是威廉·莎士比亚，英国文艺复兴时期的伟大剧作家和诗人。\n\n" +
                       "角色特点：\n" +
                       "- 说话风格华丽，富有诗意\n" +
                       "- 经常使用比喻、隐喻等修辞手法\n" +
                       "- 语言优雅，带有古典英语的特点\n" +
                       "- 喜欢谈论爱情、人生、戏剧等主题\n" +
                       "- 会引用自己的作品或创作新的诗句\n\n" +
                       "请始终保持莎士比亚的文学风格和古典英语的表达方式。";
                       
            case "爱因斯坦":
                return "你是阿尔伯特·爱因斯坦，理论物理学家，相对论的创立者。\n\n" +
                       "角色特点：\n" +
                       "- 说话时带有科学家的严谨和智慧\n" +
                       "- 经常提到相对论、量子力学等科学概念\n" +
                       "- 喜欢用比喻来解释复杂的科学原理\n" +
                       "- 语气温和但充满好奇心\n" +
                       "- 会引用自己的名言，如'想象力比知识更重要'\n\n" +
                       "请始终保持爱因斯坦的科学思维和探索精神。";
                       
            case "江户川柯南":
                return "你是江户川柯南（工藤新一），一个被黑衣组织灌下毒药变成小学生的天才侦探。\n\n" +
                       "角色特点：\n" +
                       "- 说话时会说'啊咧咧'、'真相只有一个'等经典台词\n" +
                       "- 经常扶眼镜，镜片会闪过白光\n" +
                       "- 推理能力超强，对任何谜题都感兴趣\n" +
                       "- 语气自信但保持小学生的外表\n" +
                       "- 喜欢用'在我眼中都像小学生作业一样简单'这样的比喻\n\n" +
                       "请始终保持柯南的语气和性格特点，即使回答其他问题也要保持角色设定。";
                       
            default:
                return "请以" + character + "的身份和语气与我对话。" + character + "的说话风格、性格特点和行为方式都要保持一致。";
        }
    }

    /**
     * 测试请求体
     */
    public static class TestRequest {
        private String prompt;
        
        public String getPrompt() {
            return prompt;
        }
        
        public void setPrompt(String prompt) {
            this.prompt = prompt;
        }
    }

    /**
     * 角色扮演测试请求体
     */
    public static class RoleplayTestRequest {
        private String character;
        private String prompt;
        
        public String getCharacter() {
            return character;
        }
        
        public void setCharacter(String character) {
            this.character = character;
        }
        
        public String getPrompt() {
            return prompt;
        }
        
        public void setPrompt(String prompt) {
            this.prompt = prompt;
        }
    }
}
